package LinearList;

public class SqList  implements IList{
    // 顺序表的存储空间
    private Object[] listItem;
    // 顺序表的当前长度
    private int curLen;
    // 顺序表最大长度
    private int maxSize;

    public SqList(int maxsize){
        curLen = 0;
        maxSize = maxsize;
        listItem = new Object[maxSize];
    }

    // 将顺序表置为空表
    public void clear() {
        curLen = 0;
    }



    // 判断顺序表是否为空，空返回True 不是返回False
    public boolean isEmpty() {
        return curLen == 0;
    }

    // 返回顺序表的长度
    public int length() {
        return curLen;
    }

    // 读取并且返回索引为i的数据元素
    public Object get(int i) throws Exception{
        if(i<0 || i>(curLen - 1)){
            throw new Exception("删除位置非法");
        }
        else{
            return listItem[i];
        }
    }

    // 插入x作为索引为i的元素
    public void insert(int i, Object x) throws Exception{
        if(curLen==maxSize){
            //判断顺序表是否已经满
            throw new Exception("顺序表满");
        }else if(i<0 || i>curLen){
            // 判断插入位置是否合法
            throw new Exception("插入位置非法");
        }
        // 将插入位置及其以后的数据向后进行移动一位
        for(int j=curLen; j>i; j--){
            listItem[j] = listItem[j-1];
        }
        listItem[i]=x;
        curLen++;
    }

    // 删除第i个元素
    public void remove(int i) throws Exception{
        // 判断删除的位置 必须在0-curlen 之间
        if(i<0 || i>curLen-1){
            throw new Exception("删除的位置违法");
        }
        for(int j=i; i<curLen-1; i++){
            listItem[j] = listItem[j+1];
        }
        curLen--;
    }

    // 返回元素x首次出现的位序号
    public int indexOf(Object x) {
        for(int i=0;i<=curLen-1; i++) {
            if (listItem[i].equals(x)){
                return i;
            }
        }
        return -1;
    }

    // 输出顺序表中的元素
    public void display() {
        for(int i=0;i<curLen-1; i++){
            System.out.printf(listItem[i]+" ");
        }
    }
}
